#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
//#include<string.h>
//void bubble_sort(int arr[], int sz)
//{
//	int i = 0;
//	for (i = 0;i < sz;i++)
//	{
//		int j = 0;
//		for (j = 0;j < sz - 1 - i;j++)
//		{
//			if (arr[j] > arr[j + 1])
//			{
//				int ret = arr[j + 1];
//				arr[j + 1] = arr[j];
//				arr[j] = ret;
//
//			}
//		}
//	}
//}
//int cmp_int(const void* p1, const void* p2)
//{
//	if ((*(int*)(p1)) > (*(int*)(p2)))
//		return 1;
//	else if ((*(int*)(p1)) < (*(int*)(p2)))
//		return -1;
//	else
//		return 0;
//}
//void print(int arr[], int sz)
//{
//	int i = 0;
//	for (i = 0;i< sz;i++)
//	{
//		printf("%d ", arr[i]);
//	}
//}
//int main()
//{
//	int arr[10] = { 2,1,4,3,7,6,5,9,8,0 };
//	int sz = sizeof(arr) / sizeof(arr[0]);
//	/*bubble_sort(arr, sz);*/
//	qsort(arr, sz, sizeof(arr[0]), cmp_int);
//	print(arr, sz);
//	return 0;
//}
//struct stu
//{
//	char name[20];
//	int age;
//};
//int main()
//{
//	struct stu s = { "zhangsan",20 };
//	printf("%s %d\n", s.name, s.age);
//	struct stu* p = &s;
//	printf("%s %d\n", (*p).name, (*p).age);
//	printf("%s %d\n", p->name, p->age);
//	return 0;
//
//}
//struct stu
//{
//	char name[20];
//	int age;
//};
////int comp_stu_by_name(const void* p1, const void* p2)
////{
////		return strcmp(((*(struct stu*)(p1)).name), ((*(struct stu*)(p2)).name));
////}
////int main()
////{
////	struct stu s[] = {{"zhangsan",30},{"lisi",40},{"wangwu",50}};
////	int sz = sizeof(s) / sizeof(s[0]);
////	qsort(s, sz, sizeof(s[0]), comp_stu_by_name);
////
////	return 0;
//////}
//int comp_stu_by_age(const void* p1, const void* p2)
//{
//	return (((*(struct stu*)(p1)).age) - ((*(struct stu*)(p2)).age));
//}
//int main()
//{
//	struct stu s[] = {{"zhangsan",30},{"lisi",40},{"wangwu",50}};
//	int sz = sizeof(s) / sizeof(s[0]);
//	qsort(s, sz, sizeof(s[0]), comp_stu_by_age);
//
//	return 0;
//}
//int main()
//{
//	int i = 0;
//	int arr[10] = { 0 };
//	for (i = 0;i < 10;i++)
//	{
//		scanf("%d ", &arr[i]);
//	}
//	int j = 0;
//	int add = 0;
//	for (j = 0;j < 10;j++)
//	{
//		add = add + arr[j];
//	}
//	printf("%d", add / 10);
//	return 0;
//}
void swap(char* buf1, char* buf2,size_t width)
{
	int i = 0;
	for (i = 0;i < width;i++)
	{
		char tmp = *buf1;
		*buf1 = *buf2;
		*buf2 = tmp;
		buf1++;
		buf2++;
	}
}
void print_arr(int arr[],size_t sz)
{
	int i = 0;
	for(i=0;i<sz;i++)
	{ 
		printf("%d ", arr[i]);
	}
}
int comp_int(const void *p1,const void*p2)
{
	return  ((*(char*)p1) - (*(char*)p2));
}
void bubble_sort(void* base, size_t sz, size_t width, int(*comp)(const void* p1, const void* p2))
{
	int i = 0;
	for (i = 0;i < sz-1;i++)
	{
		int j = 0;
		for (j = 0;j < sz - 1 - i;j++)
		{
			if(   comp(       (char*)base+j*width,(char*)base+(j+1)*width          )      >0         )
			{
				swap((char*)base + j * width,(char*)base + (j + 1) * width, width);
			}
		}
	}
}
void test1()
{
	int arr[10] = { 2,1,4,3,7,6,5,9,8,0 };
	size_t sz = sizeof(arr) / sizeof(arr[0]);
	size_t width = sizeof(arr[0]);
	bubble_sort(arr, sz, width, comp_int);
	print_arr(arr, sz);
}
int main()
{
	
	test1();
	return 0;
}